% 读取图像
I = imread('processed_edges.png');

% 读取图像
%I = imread('your_image.jpg');

% 灰度化
if size(I, 3) == 3 % 如果是RGB图像
    Igray = rgb2gray(I);
else
    Igray = I; % 假设已经是灰度图像
end

% 二值化
BW = imbinarize(Igray);

% 去噪
BWcleaned = bwareaopen(BW, 50); % 移除面积小于50个像素的对象

% 边缘检测
edges = edge(BWcleaned, 'Canny');

% Hough变换
[H, theta, rho] = hough(edges);

% 检测峰值
P = houghpeaks(H, 10, 'threshold', ceil(0.3*max(H(:)))); % 可能有多个垂直线

% 找到线条
lines = houghlines(edges, theta, rho, P, 'FillGap', 5, 'MinLength', 7);

% 过滤线条（只保留接近垂直的线条）
verticalLines = [];
for k = 1:length(lines)
    % 计算线段长度
    lineLength = sqrt((lines(k).point1(1) - lines(k).point2(1))^2 + ...
                      (lines(k).point1(2) - lines(k).point2(2))^2);
    
    % 跳过不符合条件的线段
    %if ~(abs(lines(k).theta - 90) < 10 || abs(lines(k).theta + 90) < 10)
    %    continue;
    %end
    
    % 过滤掉长边
    %if lineLength >= 50 % 长度阈值可以根据需要调整
    %    continue;
    %end
    
    % 添加符合条件的线段到结果列表
    verticalLines{end+1} = lines(k);
end

% 显示结果
figure, imshow(I), hold on
for k = 1:length(verticalLines)
    xy = [verticalLines{k}.point1; verticalLines{k}.point2];
    plot(xy(:,1), xy(:,2), 'LineWidth', 2, 'Color', 'green');
end

% 显示结果
figure, imshow(I), hold on
for k = 1:length(verticalLines)
    xy = [verticalLines{k}.point1; verticalLines{k}.point2];
    plot(xy(:,1), xy(:,2), 'LineWidth', 2, 'Color', 'green');
end